package net.zjitc.dao.impl;

import net.zjitc.dao.OrderDao;
import net.zjitc.pojp.Order;
import net.zjitc.pojp.Orderitem;
import net.zjitc.utils.db.C3P0Utils;
import org.apache.commons.dbutils.QueryRunner;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

/**
 * Created by Administrator on 2017/12/14.
 */
public class OrderDaoImpl implements OrderDao {
    QueryRunner runner=new QueryRunner();
    public void add(Order order) {
        String sql="insert into orders value(?,?,?,?,?,?,?,?)";//把多个参数封一个数组

        Connection conn=null;
        try {
            conn= C3P0Utils.getConnection() ;
            //1.插入订单
            Object[] obj=new Object[]{order.getOid(),order.getTotal(),order.getOrdertime(),
                          order.getState(),order.getName(),order.getPhone(),order.getAddr(),
                          order.getUser().getUid()};
            int count=runner.update(conn,sql,obj);//数据库连接对象，一定是事务开始时创建的连接对象

            /**
             * 2.插入订单子项，因为订单子项是多条记录，所以可以使用循环语句，一条条插入
             * //系统一个方法：批量处理
             * 使用循环，从订单子项目的集合中，取出每条记录，然后把相应的参数封装在对应的数组中，组成一个二维数组
              */
           sql="insert into orderitem(count,subtotal,pid,oid,osatate) values(?,?,?,？,?)";
            List<Orderitem> list=order.getOrderitemList();//订单子项的集合
            int len=list.size();
            Object[][] objs=new Object[len][];
            for(int i=0;i<len;i++){
                Orderitem item=list.get(i);//从集合中取出第i条记录
                objs[i] =new Object[]{item.getCount(),item.getSubtotal(),item.getProduct().getPid(),order.getOid(),item.getOsatate()};

            }
            //批量处理：
            runner.batch(conn,sql,objs);//使用此语句批量执行
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
}
